package com.yyx.lgb.manager.Helper;

import com.yyx.lgb.model.entity.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

/**
 * ClassName: MenuHelper
 * Package: com.yyx.lgb.manager.Helper
 * Description:
 *
 * @Author: yyx
 * @Create: 2025/8/5 - 11:17
 */

//构建树形数据
public class MenuHelper {
    //使用递归构建菜单
    public static List<SysMenu> buildTree(List<SysMenu> sysMenuList){
        //创建集合 封装最后的数据
        List<SysMenu> trees= new ArrayList<>();
        //遍历所有集合菜单
        for(SysMenu sysMenu:sysMenuList){
            if (sysMenu.getParentId().longValue() == 0) {
                //根据第一层，找下层数据，使用递归完成
                //写方法实现找下层过程，
                //方法里面传递两个参数:第一个参数当前第一层菜单，第二个参数是所有菜单集合
                trees.add(findChildren(sysMenu,sysMenuList));
            }
        }
        return trees;
    }

    private static SysMenu findChildren(SysMenu sysMenu, List<SysMenu> sysMenuList) {
        // SysMenu属性 	private List<SysMenu> children; 封装下一层数据
        sysMenu.setChildren(new ArrayList<SysMenu>());
        //递归查询
        //sysMenu的id值 和  sysMenuList中parentId相同
        for (SysMenu it : sysMenuList) {
            //判断 id 和  parentId是否相同
            if(sysMenu.getId().longValue() == it.getParentId().longValue()) {
                // it 就是下层数据， 进行封装
                sysMenu.getChildren().add(findChildren(it,sysMenuList));
            }
        }
        return sysMenu;
    }
}
